#ifndef TestModifies_h
#define TestModifies_h

#include <vector>
#include <cppunit/extensions/HelperMacros.h>
#include "Modifies.h"
#include "Type.h"

class ModifiesTest : public CPPUNIT_NS::TestFixture 
{
	Type::List::Var validVarInput, invalidVarInput,nonExistVarInput;
	Type::List::Line validLineInput, invalidLineInput, nonExistLineInput;
	Type::List::Proc validProcInput, invalidProcInput, nonExistProcInput;
	Type::List::LineEntity validEntityInput, invalidEntityInput;
	Type::Map::Bit validLineBitMap, validProcBitMap, invalidBitMap;

	Modifies modifiesTb;
	std::string msg;

	CPPUNIT_TEST_SUITE( ModifiesTest );
	CPPUNIT_TEST( testSetModifies );
	CPPUNIT_TEST( testSetBitMap );
	CPPUNIT_TEST( testGetModify  );
	CPPUNIT_TEST( testGetModified );
	CPPUNIT_TEST( testIsModifies  );
	CPPUNIT_TEST( testIsExists );
	CPPUNIT_TEST_SUITE_END();
private:
	void testSetLineModifies(Type::List::Line, Type::List::LineEntity, Type::List::Var, bool, std::string);
	void testSetProcModifies(Type::List::Proc, Type::List::Var, bool, std::string);
	void testSetLineBitMap(Type::Map::Bit, bool, std::string);
	void testSetProcBitMap(Type::Map::Bit, bool, std::string);
	void testGetLinesModify(Type::Index::Var, Type::Entity::Line, bool, Type::List::Line, std::string);
	void testGetProcsModify(Type::Index::Var, Type::List::Proc, std::string);
	void testGetModifiedByLine(Type::Index::Line, Type::List::Var, std::string);
	void testGetModifiedByProc(Type::Index::Proc, Type::List::Var, std::string);
	void testIsLineProcModifies(std::string);
	void setupLineProcBitMap();
	void testIsLineModifies(Type::Index::Line, Type::List::Var, bool, std::string);
	void testIsProcModifies(Type::Index::Proc, Type::List::Var, bool, std::string);
	void testIsExists(Type::List::Line, Type::List::Proc, Type::List::Var, bool, std::string);
public:
	void setUp();
	void tearDown();

	void testSetModifies();
	void testSetBitMap();
	void testGetModify();
	void testGetModified();
	void testIsModifies();
	void testIsExists();
};
#endif